package code.c02_list.sqList;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/12 8:21
 * @package code.c02_list.classwork.examples
 * @description 假设递增有序整数顺序表用ArrayList<Integer>对象存放，
 * 设计一个算法将两个递增有序整数顺序表A和B的全部元素合并到一个递增有序整数顺序表C 中，并采用相关数据测试
 */

public class Exam_2_8 {
    public static ArrayList<Integer> Merge2(ArrayList<Integer> A, ArrayList<Integer> B) {
        ArrayList<Integer> C = new ArrayList<>();
        int i = 0;
        int j = 0;
        // 用于两个表都没有遍历完成
        while (i < A.size() && j < B.size()) {

            if (A.get(i) < B.get(j)) { // 将较小的 a 中的元素添加到c中
                C.add(A.get(i));
                i++;
            } else { // 将较小的 b 中的元素添加到 c 中
                C.add(B.get(j));
                j++;
            }
        }

        // 当顺序表 a 没有遍历完成
        while (i < A.size()) {
            C.add(A.get(i));
            i++;
        }
        // 当顺序表 b 没有遍历完成
        while (j < B.size()) {
            C.add(B.get(j));
            j++;
        }
        return C;
    }

    public static void main(String[] args) {
        // 创建顺序表A
        Integer[] a = {1, 3, 5, 7};
        ArrayList<Integer> A = new ArrayList<>(Arrays.asList(a));
        System.out.println("A:" + A);

        // 创建顺序表B
        Integer[] b = {1, 2, 5, 7, 9, 10, 20};
        ArrayList<Integer> B = new ArrayList<>(Arrays.asList(b));
        System.out.println("B:" + B);

        // 合并顺序表
        System.out.println("================二路归并=========");

        ArrayList<Integer> C = Merge2(A, B);
        System.out.println("C:" + C);


    }
}
